<!DOCTYPE html>
<html class="client-nojs vector-feature-night-mode-disabled vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-sticky-header-enabled" lang="en" dir="ltr"><head>
<meta charset="UTF-8">
<title>J (programming language)</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="canonical" href="https://en.wikipedia.org/wiki/J_(programming_language)"> <link href="./mw/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/ext.pygments.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/user.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" type="text/css" href="./mw/site.styles.css">
<link rel="stylesheet" type="text/css" href="./mw/noscript.css">
<link rel="stylesheet" type="text/css" href="./footer.css">
<link rel="stylesheet" type="text/css" href="./vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-J_programming_language rootpage-J_programming_language skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading">
<span id="openzim-page-title" class="mw-page-title-main"><span class="mw-page-title-main">J (programming language)</span></span>
</h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="en" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="en" dir="ltr">
<style data-mw-deduplicate="TemplateStyles:r1295905060">
/* start https://en.wikipedia.org/ */
.mw-parser-output .infobox-subbox{padding:0;border:none;margin:-3px;width:auto;min-width:100%;font-size:100%;clear:none;float:none;background-color:transparent}.mw-parser-output .infobox-3cols-child{margin:auto}.mw-parser-output .infobox .navbar{font-size:100%}@media screen{html.skin-theme-clientpref-night .mw-parser-output .infobox-full-data:not(.notheme)>div:not(.notheme)[style]{background:#1f1f23!important;color:#f8f9fa}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .infobox-full-data:not(.notheme)>div:not(.notheme)[style]{background:#1f1f23!important;color:#f8f9fa}}@media(min-width:640px){body.skin--responsive .mw-parser-output .infobox-table{display:table!important}body.skin--responsive .mw-parser-output .infobox-table>caption{display:table-caption!important}body.skin--responsive .mw-parser-output .infobox-table>tbody{display:table-row-group}body.skin--responsive .mw-parser-output .infobox-table th,body.skin--responsive .mw-parser-output .infobox-table td{padding-left:inherit;padding-right:inherit}}
/* end https://en.wikipedia.org/ */
</style><table class="infobox vevent"><tbody><tr><th colspan="2" class="infobox-above" style="background-color:#e0e0e0;">J</th></tr><tr><td colspan="2" class="infobox-image"><span typeof="mw:File"></span></td></tr><tr><th scope="row" class="infobox-label"><a href="Programming_paradigm" title="Programming paradigm">Paradigm</a></th><td class="infobox-data"><a href="Array_programming" title="Array programming">Array</a>, <a href="Functional_programming" title="Functional programming">functional</a>, <a href="Object-oriented_programming" title="Object-oriented programming">object-oriented</a> (<a href="Class-based_programming" title="Class-based programming">class-based</a>, <a href="Prototype-based_programming" title="Prototype-based programming">prototype-based</a>), <a href="Function-level_programming" title="Function-level programming">function-level</a>, <a href="Tacit_programming" title="Tacit programming">tacit</a></td></tr><tr><th scope="row" class="infobox-label"><a href="Software_design" title="Software design">Designed by</a></th><td class="infobox-data"><a href="Kenneth_E._Iverson" title="Kenneth E. Iverson">Kenneth E. Iverson</a>, <a href="Roger_Hui" title="Roger Hui">Roger Hui</a></td></tr><tr><th scope="row" class="infobox-label"><a href="Software_developer" class="mw-redirect" title="Software developer">Developer</a></th><td class="infobox-data organiser">JSoftware</td></tr><tr><th scope="row" class="infobox-label">First appeared</th><td class="infobox-data">1990<span style="display:none"> (<span class="bday dtstart published updated">1990</span>)</span></td></tr><tr><td colspan="2" class="infobox-full-data"></td></tr><tr><th scope="row" class="infobox-label" style="white-space: nowrap;"><a href="Software_release_life_cycle" title="Software release life cycle">Stable release</a></th><td class="infobox-data"><div style="margin:0px;">J9.6
/ 25 February 2025<span style="display:none"> (<span class="bday dtstart published updated">2025-02-25</span>)</span><sup id="cite_ref-1" class="reference"><a href="#cite_note-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup></div></td></tr><tr style="display:none"><td colspan="2">
</td></tr><tr><th scope="row" class="infobox-label"><a href="Type_system" title="Type system">Typing discipline</a></th><td class="infobox-data"><a href="Dynamic_typing" class="mw-redirect" title="Dynamic typing">dynamic</a></td></tr><tr><th scope="row" class="infobox-label"><a href="Operating_system" title="Operating system">OS</a></th><td class="infobox-data"><a href="Cross-platform" class="mw-redirect" title="Cross-platform">Cross-platform</a>: <a href="Microsoft_Windows" title="Microsoft Windows">Windows</a>, <a href="Linux" title="Linux">Linux</a>, <a href="MacOS" title="MacOS">macOS</a>, <a href="Android_(operating_system)" title="Android (operating system)">Android</a>, <a href="IOS" title="IOS">iOS</a>, <a href="Raspberry_Pi" title="Raspberry Pi">Raspberry Pi</a><sup id="cite_ref-2" class="reference"><a href="#cite_note-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup></td></tr><tr><th scope="row" class="infobox-label"><a href="Software_license" title="Software license">License</a></th><td class="infobox-data"><a href="GNU_General_Public_License" title="GNU General Public License">GPLv3</a></td></tr><tr><th scope="row" class="infobox-label">Website</th><td class="infobox-data"><span class="url"><a rel="nofollow" class="external text" href="http://www.jsoftware.com">www<wbr>.jsoftware<wbr>.com</a></span></td></tr><tr><th colspan="2" class="infobox-header" style="background-color: #EEEEEE;">Major <a href="Programming_language_implementation" title="Programming language implementation">implementations</a></th></tr><tr><td colspan="2" class="infobox-full-data">J</td></tr><tr><th colspan="2" class="infobox-header" style="background-color: #EEEEEE;">Influenced by</th></tr><tr><td colspan="2" class="infobox-full-data"><a href="APL_(programming_language)" title="APL (programming language)">APL</a></td></tr><tr><th colspan="2" class="infobox-header" style="background-color: #EEEEEE;">Influenced</th></tr><tr><td colspan="2" class="infobox-full-data"><a href="NumPy" title="NumPy">NumPy</a>,<sup id="cite_ref-Python_for_Data_Analysis_3-0" class="reference"><a href="#cite_note-Python_for_Data_Analysis-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup> <a href="SuperCollider" title="SuperCollider">SuperCollider</a><sup id="cite_ref-SuperCollider_documentation_4-0" class="reference"><a href="#cite_note-SuperCollider_documentation-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup></td></tr></tbody></table>
<p>The <b>J</b> <a href="Programming_language" title="Programming language">programming language</a>, developed in the early 1990s by <a href="Kenneth_E._Iverson" title="Kenneth E. Iverson">Kenneth E. Iverson</a> and <a href="Roger_Hui" title="Roger Hui">Roger Hui</a>,<sup id="cite_ref-5" class="reference"><a href="#cite_note-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-6" class="reference"><a href="#cite_note-6"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup> is an <a href="Array_programming" title="Array programming">array programming</a> language based primarily on <a href="APL_(programming_language)" title="APL (programming language)">APL</a> (also by Iverson).
</p><p>To avoid repeating the APL special-character problem, J uses only the basic <a href="ASCII" title="ASCII">ASCII</a> character set, resorting to the use of the dot and colon as <i>inflections</i><sup id="cite_ref-7" class="reference"><a href="#cite_note-7"><span class="cite-bracket">[</span>7<span class="cite-bracket">]</span></a></sup> to form short words similar to <i><a href="Digraph_(computing)" class="mw-redirect" title="Digraph (computing)">digraphs</a></i>. Most such <i>primary</i> (or <i>primitive</i>) J words serve as mathematical symbols, with the dot or colon extending the meaning of the basic characters available. Also, many characters which in other languages often must be paired (such as <code>[] {} "" ``</code> or <code><></code>) are treated by J as stand-alone words or, when inflected, as single-character roots of multi-character words.
</p><p>J is a very terse <a href="Array_programming_language" class="mw-redirect" title="Array programming language">array programming language</a>, and is most suited to <a href="Mathematical" class="mw-redirect" title="Mathematical">mathematical</a> and <a href="Statistical" class="mw-redirect" title="Statistical">statistical</a> programming, especially when performing operations on <a href="Matrix_(mathematics)" title="Matrix (mathematics)">matrices</a>. It has also been used in <a href="Extreme_programming" title="Extreme programming">extreme programming</a><sup id="cite_ref-8" class="reference"><a href="#cite_note-8"><span class="cite-bracket">[</span>8<span class="cite-bracket">]</span></a></sup> and <a href="Network_performance" title="Network performance">network performance</a> analysis.<sup id="cite_ref-9" class="reference"><a href="#cite_note-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup>
</p><p>Like <a href="John_Backus" title="John Backus">John Backus</a>'s languages <a href="FP_(programming_language)" title="FP (programming language)">FP</a> and <a href="FL_(programming_language)" title="FL (programming language)">FL</a>, J supports <a href="Function-level_programming" title="Function-level programming">function-level programming</a> via its <i><a href="Tacit_programming" title="Tacit programming">tacit programming</a></i> features.
</p><p>Unlike most languages that support <a href="Object-oriented_programming" title="Object-oriented programming">object-oriented programming</a>, J's flexible hierarchical <a href="Namespace" title="Namespace">namespace</a> scheme (where every name exists in a specific <i>locale</i>) can be effectively used as a framework for both <a href="Class-based_programming" title="Class-based programming">class-based</a> and <a href="Prototype-based_programming" title="Prototype-based programming">prototype-based</a> object-oriented programming.
</p><p>Since March 2011, J is <a href="Free_and_open-source_software" title="Free and open-source software">free and open-source software</a> under the <a href="GNU_General_Public_License" title="GNU General Public License">GNU General Public License</a> version 3 (GPLv3).<sup id="cite_ref-j_source_download_10-0" class="reference"><a href="#cite_note-j_source_download-10"><span class="cite-bracket">[</span>10<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-j_gpl_11-0" class="reference"><a href="#cite_note-j_gpl-11"><span class="cite-bracket">[</span>11<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-12" class="reference"><a href="#cite_note-12"><span class="cite-bracket">[</span>12<span class="cite-bracket">]</span></a></sup> One may also purchase source under a negotiated license.<sup id="cite_ref-j_source_13-0" class="reference"><a href="#cite_note-j_source-13"><span class="cite-bracket">[</span>13<span class="cite-bracket">]</span></a></sup>
</p>
<meta property="mw:PageProp/toc">
<div class="mw-heading mw-heading2"><h2 id="Examples">Examples</h2></div>
<p>J permits <a href="Tacit_programming" title="Tacit programming">point-free style</a> and <a href="Function_composition_(computer_science)" title="Function composition (computer science)">function composition</a>. Thus, its programs can be very terse and are considered difficult to read by some programmers.
</p><p>The <a href="%22Hello%2C_World!%22_program" title=""Hello, World!" program">"Hello, World!" program</a> in J is:
</p>
<div class="mw-highlight mw-highlight-lang-j mw-content-ltr" dir="ltr"><pre><span class="s">'Hello, World!'</span>
</pre></div>
<p>This implementation of hello world reflects the traditional use of J – programs are entered into a J interpreter session, and the results of expressions are displayed. It's also possible to arrange for J scripts to be executed as standalone programs. Here's how this might look on a <a href="Unix" title="Unix">Unix</a> system:
</p>
<div class="mw-highlight mw-highlight-lang-j mw-content-ltr" dir="ltr"><pre><span class="cp">#!/bin/jc</span>
<span class="nv">echo</span><span class="w"> </span><span class="s">'Hello, world!'</span>
<span class="nv">exit</span><span class="w"> </span><span class="s">''</span>
</pre></div>
<p>(Note that current j implementations install either <code>jconsole</code> or (because jconsole is used by java), <code>ijconsole</code> and likely install this to <a href=".//usr/bin" class="mw-redirect" title="/usr/bin">/usr/bin</a> or some other directory (perhaps the Application directory on OSX). So, there's a system dependency here which the user would have to solve.)
</p><p>Historically, APL used <code>/</code> to indicate the <a href="Fold_(higher-order_function)" title="Fold (higher-order function)">fold</a>, so <code>+/1 2 3</code> was equivalent to <code>1+2+3</code>. Meanwhile, division was represented with the mathematical <a href="Division_symbol" class="mw-redirect" title="Division symbol">division symbol</a> (<code class="mw-highlight mw-highlight-lang-text mw-content-ltr" style="" dir="ltr">÷</code>).
</p><p>Because ASCII does not include a division symbol <i>per se</i>, J uses % to represent division, as a visual approximation or reminder. (This illustrates something of the mnemonic character of J's tokens, and some of the quandaries imposed by the use of ASCII.)
</p><p>Defining a J function named <code>avg</code> to calculate the average of a list of numbers yields:
</p>
<pre> <code class="mw-highlight mw-highlight-lang-j mw-content-ltr" style="" dir="ltr"><span class="nv">avg</span><span class="o">=:</span><span class="w"> </span><span class="o">+/</span><span class="w"> </span><span class="o">%</span><span class="w"> </span><span class="o">#</span></code>
</pre>
<ul><li><code> +/ </code>sums the items of the array.</li>
<li><code> # </code>counts the number of items in the array.</li>
<li><code> % </code>divides the sum by the number of items.</li></ul>
<p>This is a test execution of the function:
</p>
<pre> <code class="mw-highlight mw-highlight-lang-j mw-content-ltr" style="" dir="ltr"><span class="nv">avg</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="mi">3</span><span class="w"> </span><span class="mi">4</span></code>
<span style="color:sienna;">2.5</span>
</pre>
<p>Above, <i>avg</i> is defined using a train of three verbs (<code>+/</code>, <code>%</code>, and <code>#</code>) termed a <i>fork</i>. Specifically, <code>(V0 V1 V2) Ny</code> is the same as <code>(V0(Ny)) V1 (V2(Ny))</code> which shows some of the power of J. (Here V0, V1, and V2 denote verbs and Ny denotes a noun.)
</p><p>Some examples of using <code>avg</code>:
</p>
<pre> <code class="mw-highlight mw-highlight-lang-j mw-content-ltr" style="" dir="ltr"><span class="nv">v</span><span class="o">=:</span><span class="w"> </span><span class="o">?.</span><span class="w"> </span><span class="mi">20</span><span class="w"> </span><span class="o">$</span><span class="mi">100</span></code> <span style="color:gray;">NB. a random vector</span>
<code class="mw-highlight mw-highlight-lang-text mw-content-ltr" style="" dir="ltr">v</code>
<span style="color:sienna">46 55 79 52 54 39 60 57 60 94 46 78 13 18 51 92 78 60 90 62</span>
<code class="mw-highlight mw-highlight-lang-j mw-content-ltr" style="" dir="ltr"><span class="nv">avg</span><span class="w"> </span><span class="nv">v</span></code>
<span style="color:sienna;">59.2</span>
</pre>
<pre> <code class="mw-highlight mw-highlight-lang-j mw-content-ltr" style="" dir="ltr"><span class="mi">4</span><span class="w"> </span><span class="nv">avg</span><span class="o">\</span><span class="w"> </span><span class="nv">v</span></code> <span style="color:gray;">NB. moving average on periods of size 4</span>
<span style="color:sienna;">58 60 56 51.25 52.5 54 67.75 64.25 69.5 57.75 38.75 40 43.5 59.75 70.25 80 72.5</span>
</pre>
<pre> <code class="mw-highlight mw-highlight-lang-j mw-content-ltr" style="" dir="ltr"><span class="nv">m</span><span class="o">=:</span><span class="w"> </span><span class="o">?.</span><span class="w"> </span><span class="mi">4</span><span class="w"> </span><span class="mi">5</span><span class="w"> </span><span class="o">$</span><span class="mi">50</span></code> <span style="color:gray;">NB. a random matrix</span>
<code class="mw-highlight mw-highlight-lang-text mw-content-ltr" style="" dir="ltr">m</code>
<span style="color:sienna;">46 5 29 2 4
39 10 7 10 44
46 28 13 18 1
42 28 10 40 12</span>
</pre>
<pre> <code class="mw-highlight mw-highlight-lang-j mw-content-ltr" style="" dir="ltr"><span class="nv">avg</span><span class="o">"</span><span class="mi">1</span><span class="w"> </span><span class="nv">m</span></code> <span style="color:gray;">NB. apply avg to each rank 1 subarray (each row) of m</span>
<span style="color:sienna;">17.2 22 21.2 26.4</span>
</pre>
<p><a href="Rank_(J_programming_language)" title="Rank (J programming language)">Rank</a> is a crucial concept in J. Its significance in J is similar to the significance of <code>select</code> in <a href="SQL" title="SQL">SQL</a> and of <code>while</code> in <a href="C_(programming_language)" title="C (programming language)">C</a>.
</p><p>Implementing <a href="Quicksort" title="Quicksort">quicksort</a>, from the J Dictionary yields:
</p>
<div class="mw-highlight mw-highlight-lang-j mw-content-ltr" dir="ltr"><pre><span class="w"> </span><span class="nv">sel</span><span class="o">=:</span><span class="w"> </span><span class="nv">adverb</span><span class="w"> </span><span class="nv">def</span><span class="w"> </span><span class="s">'u # ['</span>
<span class="w"> </span>
<span class="w"> </span><span class="nv">quicksort</span><span class="o">=:</span><span class="w"> </span><span class="nf">verb</span><span class="w"> </span><span class="nf">define</span>
<span class="w"> </span><span class="nl">if.</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="o">>:</span><span class="w"> </span><span class="o">#</span><span class="nd">y</span><span class="w"> </span><span class="nl">do.</span><span class="w"> </span><span class="nd">y</span>
<span class="w"> </span><span class="nl">else.</span>
<span class="w"> </span><span class="p">(</span><span class="nv">quicksort</span><span class="w"> </span><span class="nd">y</span><span class="w"> </span><span class="o"><</span><span class="nv">sel</span><span class="w"> </span><span class="nv">e</span><span class="p">)</span><span class="o">,</span><span class="p">(</span><span class="nd">y</span><span class="w"> </span><span class="o">=</span><span class="nv">sel</span><span class="w"> </span><span class="nv">e</span><span class="p">)</span><span class="o">,</span><span class="nv">quicksort</span><span class="w"> </span><span class="nd">y</span><span class="w"> </span><span class="o">></span><span class="nv">sel</span><span class="w"> </span><span class="nv">e</span><span class="o">=.</span><span class="nd">y</span><span class="o">{~?#</span><span class="nd">y</span>
<span class="w"> </span><span class="nl">end.</span>
<span class="w"> </span><span class="n">)</span>
</pre></div>
<p>The following is an implementation of quicksort demonstrating <a href="Tacit_programming" title="Tacit programming">tacit programming</a>. The latter involves composing functions together and not referring explicitly to any variables. J's support for <i>forks</i> and <i>hooks</i> dictates rules on how arguments applied to this function will be applied to its component functions.
</p>
<div class="mw-highlight mw-highlight-lang-j mw-content-ltr" dir="ltr"><pre><span class="w"> </span><span class="nv">quicksort</span><span class="o">=:</span><span class="w"> </span><span class="p">((</span><span class="o">$:@</span><span class="p">(</span><span class="o"><#[</span><span class="p">)</span><span class="o">,</span><span class="w"> </span><span class="p">(</span><span class="o">=#[</span><span class="p">)</span><span class="o">,</span><span class="w"> </span><span class="o">$:@</span><span class="p">(</span><span class="o">>#[</span><span class="p">))</span><span class="w"> </span><span class="p">(</span><span class="o">{~</span><span class="w"> </span><span class="o">?@#</span><span class="p">))</span><span class="w"> </span><span class="o">^:</span><span class="w"> </span><span class="p">(</span><span class="mi">1</span><span class="o"><#</span><span class="p">)</span>
</pre></div>
<p>Sorting in J is usually accomplished using the built-in (primitive) verbs <code>/:</code> (sort up) and <code>\:</code> (sort down). User-defined sorts such as quicksort, above, typically are for illustration only.
</p><p>The following example demonstrates the usage of the self-reference verb <code>$:</code> to recursively calculate fibonacci numbers:
</p>
<div class="mw-highlight mw-highlight-lang-j mw-content-ltr" dir="ltr"><pre><span class="mi">1</span><span class="o">:`</span><span class="p">(</span><span class="o">$:@-&</span><span class="mi">2</span><span class="o">+$:@<:</span><span class="p">)</span><span class="o">@.</span><span class="p">(</span><span class="o">>&</span><span class="mi">2</span><span class="p">)</span>
</pre></div>
<p>This recursion can also be accomplished by referring to the verb by name, although this is of course possible only if the verb is named:
</p>
<div class="mw-highlight mw-highlight-lang-j mw-content-ltr" dir="ltr"><pre><span class="nv">fibonacci</span><span class="o">=:</span><span class="mi">1</span><span class="o">:`</span><span class="p">(</span><span class="nv">fibonacci</span><span class="o">@-&</span><span class="mi">2</span><span class="o">+</span><span class="nv">fibonacci</span><span class="o">@<:</span><span class="p">)</span><span class="o">@.</span><span class="p">(</span><span class="o">>&</span><span class="mi">2</span><span class="p">)</span>
</pre></div>
<p>The following expression exhibits <a href="Pi" title="Pi">pi</a> with n digits and demonstrates the extended precision abilities of J:
</p>
<pre> <code class="mw-highlight mw-highlight-lang-j mw-content-ltr" style="" dir="ltr"><span class="nv">n</span><span class="o">=:</span><span class="w"> </span><span class="mi">50</span></code> <span style="color:gray;">NB. set n as the number of digits required</span>
<code class="mw-highlight mw-highlight-lang-j mw-content-ltr" style="" dir="ltr"><span class="o"><.@</span><span class="nv">o</span><span class="o">.</span><span class="w"> </span><span class="il">10x</span><span class="o">^</span><span class="nv">n</span></code> <span style="color:gray;">NB. extended precision 10 to the nth * pi</span>
<span style="color:sienna;">314159265358979323846264338327950288419716939937510</span>
</pre>
<div class="mw-heading mw-heading2"><h2 id="Verbs_and_Modifiers">Verbs and Modifiers</h2></div>
<p>A program or routine – something that takes data as input and produces data as output – is called a <i>verb</i>. J has a rich set of predefined verbs, all of which work on multiple data types automatically: for example, the verb <style data-mw-deduplicate="TemplateStyles:r886049734">
/* start https://en.wikipedia.org/ */
.mw-parser-output .monospaced{font-family:monospace,monospace}
/* end https://en.wikipedia.org/ */
</style><span class="monospaced">i.</span> searches within arrays of any size to find matches:
</p>
<div class="mw-highlight mw-highlight-lang-j mw-content-ltr" dir="ltr"><pre><span class="w"> </span><span class="mi">3</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="mi">4</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="mi">5</span><span class="w"> </span><span class="mi">9</span><span class="w"> </span><span class="nv">i</span><span class="o">.</span><span class="w"> </span><span class="mi">3</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="c1">NB. find the index of the first occurrence of 3, and of 1</span>
<span class="mi">0</span><span class="w"> </span><span class="mi">1</span>
<span class="w"> </span><span class="mi">3</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="mi">4</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="mi">5</span><span class="w"> </span><span class="mi">9</span><span class="w"> </span><span class="nv">i</span><span class="o">:</span><span class="w"> </span><span class="mi">3</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="c1">NB. find the index of the last occurrence of 3, and of 1</span>
<span class="mi">0</span><span class="w"> </span><span class="mi">3</span>
</pre></div>
<p>User programs can be named and used wherever primitives are allowed.
</p><p>The power of J comes largely from its <i>modifiers</i>: symbols that take nouns <b>and verbs</b> as operands and apply the operands in a specified way. For example, the modifier <span class="monospaced">/</span> takes one operand, a verb to its left, and produces a verb that applies that verb between each item of its argument. That is, <span class="monospaced">+/</span> is a verb, defined as 'apply <span class="monospaced">+</span> between the items of your argument' Thus, the sentence
</p>
<div class="mw-highlight mw-highlight-lang-j mw-content-ltr" dir="ltr"><pre><span class="w"> </span><span class="o">+/</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="mi">3</span><span class="w"> </span><span class="mi">4</span><span class="w"> </span><span class="mi">5</span>
</pre></div>
<p>produces the effect of
</p>
<div class="mw-highlight mw-highlight-lang-j mw-content-ltr" dir="ltr"><pre><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">3</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">4</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">5</span>
<span class="w"> </span><span class="o">+/</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="mi">3</span><span class="w"> </span><span class="mi">4</span><span class="w"> </span><span class="mi">5</span>
<span class="mi">15</span>
</pre></div>
<p>J has roughly two dozen of these modifiers. All of them can apply to any verb, even a user-written verb, and users may write their own modifiers. While modifiers are powerful individually, allowing
</p>
<ul><li>repeated execution, i. e. <i>do-while</i></li>
<li>conditional execution, i. e. <i>if</i></li>
<li>execution of regular or irregular subsets of arguments</li></ul>
<p>some of the modifiers control the order in which components are executed, allowing modifiers to be combined in any order to produce the unlimited variety of operations needed for practical programming.
</p>
<div class="mw-heading mw-heading2"><h2 id="Data_types_and_structures">Data types and structures</h2></div>
<p>J supports three simple types:
</p>
<ul><li>Numeric</li>
<li>Literal (Character)</li>
<li>Boxed</li></ul>
<p>Of these, numeric has the most variants.
</p><p>One of J's numeric types is the <i>bit</i>. There are two bit values: <i>0</i>, and <i>1</i>. Also, bits can be formed into lists. For example, <code> 1 0 1 0 1 1 0 0 </code> is a list of eight bits. Syntactically, the J parser treats that as one word. (The space character is recognized as a word-forming character between what would otherwise be numeric words.) Lists of arbitrary length are supported.
</p><p>Further, J supports all the usual binary operations on these lists, such as <i>and</i>, <i>or</i>, <i>exclusive or</i>, <i>rotate</i>, <i>shift</i>, <i>not</i>, etc. For example,
</p>
<pre> 1 0 0 1 0 0 1 0 +. 0 1 0 1 1 0 1 0 <span style="color:gray">NB. or</span>
<span style="color:sienna">1 1 0 1 1 0 1 0</span>
</pre>
<pre> 3 |. 1 0 1 1 0 0 1 1 1 1 1 <span style="color:gray">NB. rotate</span>
<span style="color:sienna">1 0 0 1 1 1 1 1 1 0 1</span>
</pre>
<p>J also supports higher order arrays of bits. They can be formed into two-dimensional, three-dimensional, etc. arrays. The above operations perform equally well on these arrays.
</p><p>Other numeric types include integer (e.g., 3, 42), floating point (3.14, 8.8e22), complex (0j1, 2.5j3e88), extended precision integer (12345678901234567890x), and (extended precision) rational fraction (1r2, 3r4). As with bits, these can be formed into lists or arbitrarily dimensioned arrays. As with bits, operations are performed on all numbers in an array.
</p><p>Lists of bits can be converted to integer using the <code>#.</code> verb. Integers can be converted to lists of bits using the <code>#:</code> verb. (When parsing J, <code>.</code> (period) and <code>:</code> (colon) are word-forming characters. They are never tokens alone, unless preceded by <a href="Whitespace_character" title="Whitespace character">whitespace characters</a>.)
</p><p>J also supports the literal (character) type. Literals are enclosed in quotes, for example, <code>'a'</code> or <code>'b'</code>. Lists of literals are also supported using the usual convention of putting multiple characters in quotes, such as <code>'abcdefg'</code>. Typically, individual literals are 8-bits wide (ASCII), but J also supports other literals (<a href="Unicode" title="Unicode">Unicode</a>). Numeric and Boolean operations are not supported on literals, but collection-oriented operations (such as rotate) are supported.
</p><p>Finally, there is a boxed data type. Typically, data is put in a box using the <code><</code> operation (with no left argument; if there's a left argument, this would be the <i>less than</i> operation). This is analogous to <a href="C_(programming_language)" title="C (programming language)">C</a>'s <code>&</code> operation (with no left argument). However, where the result of C's <code>&</code> has reference semantics, the result of J's <code><</code> has value semantics. In other words, <code><</code> is a function and it produces a result. The result has 0 dimensions, regardless of the structure of the contained data. From the viewpoint of a J programmer, <code><</code> <i>puts the data into a box</i> and allows working with an array of boxes (it can be assembled with other boxes or more copies can be made of the box).
</p>
<pre> <1 0 0 1 0
<span style="color:sienna">+---------+
|1 0 0 1 0|
+---------+</span>
</pre>
<p>The only collection type offered by J is the arbitrarily dimensioned array. Most algorithms can be expressed very concisely using operations on these arrays.
</p><p>J's arrays are homogeneously typed, for example the list <code> 1 2 3 </code> is a list of integers despite <code> 1 </code> being a bit. For the most part, these sorts of type issues are transparent to programmers. Only certain specialized operations reveal differences in type. For example, the list <code> 1.0 0.0 1.0 0.0 </code> would be treated exactly the same, by most operations, as the list <code> 1 0 1 0 </code>.
</p><p>J also supports sparse numeric arrays where non-zero values are stored with their indices. This is an efficient mechanism where relatively few values are non-zero.
</p><p>J also supports objects and classes,<sup id="cite_ref-14" class="reference"><a href="#cite_note-14"><span class="cite-bracket">[</span>14<span class="cite-bracket">]</span></a></sup> but these are an artifact of the way things are named, and are not data types. Instead, boxed literals are used to refer to objects (and classes). J data has value semantics, but objects and classes need reference semantics.
</p><p>Another pseudo-type—associated with name, rather than value—is the memory mapped file.
</p>
<div class="mw-heading mw-heading2"><h2 id="Debugging">Debugging</h2></div>
<p>J has the usual facilities for stopping on error or at specified places within verbs. It also has a unique visual debugger, called <a rel="nofollow" class="external text" href="http://code.jsoftware.com/wiki/Vocabulary/Dissect"><i>Dissect</i></a>, that gives a 2-D interactive display of the execution of a single J sentence. Because a single sentence of J performs as much computation as an entire subroutine in lower-level languages, the visual display is quite helpful.
</p>
<div class="mw-heading mw-heading2"><h2 id="Documentation">Documentation</h2></div>
<p>J's documentation includes a <a rel="nofollow" class="external text" href="http://code.jsoftware.com/wiki/NuVoc">dictionary</a>, with words in J identified as <a rel="nofollow" class="external text" href="http://code.jsoftware.com/wiki/Vocabulary/Nouns">nouns</a>, <a rel="nofollow" class="external text" href="http://code.jsoftware.com/wiki/Vocabulary/Verbs">verbs</a>, <a rel="nofollow" class="external text" href="http://code.jsoftware.com/wiki/Vocabulary/Modifiers">modifiers</a>, and so on. Primary words are listed in the <a rel="nofollow" class="external text" href="http://code.jsoftware.com/wiki/Vocabulary/Words">vocabulary</a>, in which their respective <a rel="nofollow" class="external text" href="http://code.jsoftware.com/wiki/Vocabulary/PartsOfSpeech">parts of speech</a> are indicated using markup. Note that verbs have two forms: <a href="Arity" title="Arity">monadic</a> (arguments only on the right) and <a href="Arity" title="Arity">dyadic</a> (arguments on the left and on the right). For example, in '<code>-1</code>' the hyphen is a monadic verb, and in '<code>3-2</code>' the hyphen is a dyadic verb. The monadic definition is mostly independent of the dyadic definition, regardless of whether the verb is a primitive verb or a derived verb.
</p>
<div class="mw-heading mw-heading2"><h2 id="Control_structures">Control structures</h2></div>
<p>J provides control structures <a rel="nofollow" class="external text" href="http://jsoftware.com/help/dictionary/ctrl.htm">(details here)</a> similar to other procedural languages. Prominent control words in each category include:
</p>
<ul><li><code>assert.</code></li>
<li><code>break.</code></li>
<li><code>continue.</code></li>
<li><code>for.</code></li>
<li><code>goto_label.</code></li>
<li><code>if. else. elseif.</code></li>
<li><code>return.</code></li>
<li><code>select. case.</code></li>
<li><code>throw.</code></li>
<li><code>try. catch.</code></li>
<li><code>while. whilst.</code></li></ul>
<div class="mw-heading mw-heading2"><h2 id="See_also">See also</h2></div>
<ul><li><a href="K_(programming_language)" title="K (programming language)">K (programming language)</a> – another APL-influenced language</li>
<li><a href="Q_(programming_language_from_Kx_Systems)" title="Q (programming language from Kx Systems)">Q</a> – The language of KDB+ and a new merged version of K and KSQL.</li></ul>
<div class="mw-heading mw-heading2"><h2 id="References">References</h2></div>
<style data-mw-deduplicate="TemplateStyles:r1239543626">
/* start https://en.wikipedia.org/ */
.mw-parser-output .reflist{margin-bottom:0.5em;list-style-type:decimal}@media screen{.mw-parser-output .reflist{font-size:90%}}.mw-parser-output .reflist .references{font-size:100%;margin-bottom:0;list-style-type:inherit}.mw-parser-output .reflist-columns-2{column-width:30em}.mw-parser-output .reflist-columns-3{column-width:25em}.mw-parser-output .reflist-columns{margin-top:0.3em}.mw-parser-output .reflist-columns ol{margin-top:0}.mw-parser-output .reflist-columns li{page-break-inside:avoid;break-inside:avoid-column}.mw-parser-output .reflist-upper-alpha{list-style-type:upper-alpha}.mw-parser-output .reflist-upper-roman{list-style-type:upper-roman}.mw-parser-output .reflist-lower-alpha{list-style-type:lower-alpha}.mw-parser-output .reflist-lower-greek{list-style-type:lower-greek}.mw-parser-output .reflist-lower-roman{list-style-type:lower-roman}
/* end https://en.wikipedia.org/ */
</style><div class="reflist">
<div class="mw-references-wrap mw-references-columns"><ol class="references">
<li id="cite_note-1"><span class="mw-cite-backlink"><b><a href="#cite_ref-1">^</a></b></span> <span class="reference-text"><style data-mw-deduplicate="TemplateStyles:r1238218222">
/* start https://en.wikipedia.org/ */
.mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:"\"""\"""'""'"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free.id-lock-free a{background:url("./mw/Lock-green.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited.id-lock-limited a,.mw-parser-output .id-lock-registration.id-lock-registration a{background:url("./mw/Lock-gray-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription.id-lock-subscription a{background:url("./mw/Lock-red-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:url("./mw/Wikisource-logo.svg")right 0.1em center/12px no-repeat}body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-free a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-limited a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-registration a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-subscription a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .cs1-ws-icon a{background-size:contain;padding:0 1em 0 0}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:var(--color-error,#d33)}.mw-parser-output .cs1-visible-error{color:var(--color-error,#d33)}.mw-parser-output .cs1-maint{display:none;color:#085;margin-left:0.3em}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}@media screen{.mw-parser-output .cs1-format{font-size:95%}html.skin-theme-clientpref-night .mw-parser-output .cs1-maint{color:#18911f}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .cs1-maint{color:#18911f}}
/* end https://en.wikipedia.org/ */
</style><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://code.jsoftware.com/wiki/System/ReleaseNotes/J9.6">"Release Notes J9.6"</a>.</cite></span>
</li>
<li id="cite_note-2"><span class="mw-cite-backlink"><b><a href="#cite_ref-2">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://www.jsoftware.com/#/README">"Jsoftware"</a>.</cite></span>
</li>
<li id="cite_note-Python_for_Data_Analysis-3"><span class="mw-cite-backlink"><b><a href="#cite_ref-Python_for_Data_Analysis_3-0">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://traims.tumblr.com/post/33883718232/python-for-data-analysis-18-oct-2012-london">Wes McKinney at 2012 meeting Python for Data Analysis</a></span>
</li>
<li id="cite_note-SuperCollider_documentation-4"><span class="mw-cite-backlink"><b><a href="#cite_ref-SuperCollider_documentation_4-0">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://doc.sccode.org/Reference/Adverbs.html">SuperCollider documentation, Adverbs for Binary Operators</a></span>
</li>
<li id="cite_note-5"><span class="mw-cite-backlink"><b><a href="#cite_ref-5">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20040812193452/http://home1.gte.net/res057qw/APL_J/IversonAPL.htm">A Personal View of APL</a>, 1991 essay by K.E. Iverson (archived link)</span>
</li>
<li id="cite_note-6"><span class="mw-cite-backlink"><b><a href="#cite_ref-6">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://jsoftware.com/pipermail/general/2002-March/010962.html">Overview of J history</a> by Roger Hui (19 March 2002)</span>
</li>
<li id="cite_note-7"><span class="mw-cite-backlink"><b><a href="#cite_ref-7">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://code.jsoftware.com/wiki/Vocabulary/Words">J NuVoc Words</a></span>
</li>
<li id="cite_note-8"><span class="mw-cite-backlink"><b><a href="#cite_ref-8">^</a></b></span> <span class="reference-text"><cite id="CITEREFBussellTaylor2006" class="citation book cs1">Bussell, Brian; Taylor, Stephen (2006). <i>Software Development as a Collaborative Writing Project</i>. Extreme programming and agile processes in software engineering. Oulu, Finland: <a href="Springer_Science%2BBusiness_Media" title="Springer Science+Business Media">Springer</a>. pp. <span class="nowrap">21–</span>31. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-3-540-35094-1</bdi>.</cite></span>
</li>
<li id="cite_note-9"><span class="mw-cite-backlink"><b><a href="#cite_ref-9">^</a></b></span> <span class="reference-text"><cite id="CITEREFHolt2007" class="citation book cs1">Holt, Alan (2007). <i>Network Performance Analysis: Using the J Programming Language</i>. <a href="Springer_Science%2BBusiness_Media" title="Springer Science+Business Media">Springer</a>. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-1-84628-822-7</bdi>.</cite></span>
</li>
<li id="cite_note-j_source_download-10"><span class="mw-cite-backlink"><b><a href="#cite_ref-j_source_download_10-0">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://www.jsoftware.com/#/source">Jsoftware's source download page</a></span>
</li>
<li id="cite_note-j_gpl-11"><span class="mw-cite-backlink"><b><a href="#cite_ref-j_gpl_11-0">^</a></b></span> <span class="reference-text"><cite id="CITEREFEric_Iverson2011" class="citation web cs1">Eric Iverson (1 March 2011). <a rel="nofollow" class="external text" href="https://web.archive.org/web/20160923133425/http://thread.gmane.org/gmane.comp.lang.j.programming/20882">"J Source GPL"</a>. <i>J programming mailing list</i>. Archived from <a rel="nofollow" class="external text" href="http://thread.gmane.org/gmane.comp.lang.j.programming/20882">the original</a> on 23 September 2016<span class="reference-accessdate">. Retrieved <span class="nowrap">24 June</span> 2015</span>.</cite></span>
</li>
<li id="cite_note-12"><span class="mw-cite-backlink"><b><a href="#cite_ref-12">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://github.com/openj/core">openj</a> on <a href="GitHub" title="GitHub">GitHub</a></span>
</li>
<li id="cite_note-j_source-13"><span class="mw-cite-backlink"><b><a href="#cite_ref-j_source_13-0">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://www.jsoftware.com/#/source">Jsoftware's sourcing policy</a></span>
</li>
<li id="cite_note-14"><span class="mw-cite-backlink"><b><a href="#cite_ref-14">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://www.jsoftware.com/help/learning/25.htm">Chapter 25: Object-Oriented Programming</a></span>
</li>
</ol></div></div>
<div class="mw-heading mw-heading2"><h2 id="External_links">External links</h2></div>
<ul><li><span class="official-website"><span class="url"><a rel="nofollow" class="external text" href="http://www.jsoftware.com">Official website</a></span></span> – JSoftware, creators of J</li>
<li><a rel="nofollow" class="external text" href="https://github.com/jsoftware/jsource">jsource</a> on <a href="GitHub" title="GitHub">GitHub</a> – Repository of source</li>
<li><a rel="nofollow" class="external text" href="https://code.jsoftware.com/wiki/Main_Page">J Wiki</a></li>
<li><a rel="nofollow" class="external text" href="http://www.jsoftware.com/help/learning/contents.htm">Learning J</a> – An Introduction to the J Programming Language by Roger Stokes</li></ul>
<p class="mw-empty-elt">
</p>
<div class="navbox-styles"><style data-mw-deduplicate="TemplateStyles:r1129693374">
/* start https://en.wikipedia.org/ */
.mw-parser-output .hlist dl,.mw-parser-output .hlist ol,.mw-parser-output .hlist ul{margin:0;padding:0}.mw-parser-output .hlist dd,.mw-parser-output .hlist dt,.mw-parser-output .hlist li{margin:0;display:inline}.mw-parser-output .hlist.inline,.mw-parser-output .hlist.inline dl,.mw-parser-output .hlist.inline ol,.mw-parser-output .hlist.inline ul,.mw-parser-output .hlist dl dl,.mw-parser-output .hlist dl ol,.mw-parser-output .hlist dl ul,.mw-parser-output .hlist ol dl,.mw-parser-output .hlist ol ol,.mw-parser-output .hlist ol ul,.mw-parser-output .hlist ul dl,.mw-parser-output .hlist ul ol,.mw-parser-output .hlist ul ul{display:inline}.mw-parser-output .hlist .mw-empty-li{display:none}.mw-parser-output .hlist dt::after{content:": "}.mw-parser-output .hlist dd::after,.mw-parser-output .hlist li::after{content:" · ";font-weight:bold}.mw-parser-output .hlist dd:last-child::after,.mw-parser-output .hlist dt:last-child::after,.mw-parser-output .hlist li:last-child::after{content:none}.mw-parser-output .hlist dd dd:first-child::before,.mw-parser-output .hlist dd dt:first-child::before,.mw-parser-output .hlist dd li:first-child::before,.mw-parser-output .hlist dt dd:first-child::before,.mw-parser-output .hlist dt dt:first-child::before,.mw-parser-output .hlist dt li:first-child::before,.mw-parser-output .hlist li dd:first-child::before,.mw-parser-output .hlist li dt:first-child::before,.mw-parser-output .hlist li li:first-child::before{content:" (";font-weight:normal}.mw-parser-output .hlist dd dd:last-child::after,.mw-parser-output .hlist dd dt:last-child::after,.mw-parser-output .hlist dd li:last-child::after,.mw-parser-output .hlist dt dd:last-child::after,.mw-parser-output .hlist dt dt:last-child::after,.mw-parser-output .hlist dt li:last-child::after,.mw-parser-output .hlist li dd:last-child::after,.mw-parser-output .hlist li dt:last-child::after,.mw-parser-output .hlist li li:last-child::after{content:")";font-weight:normal}.mw-parser-output .hlist ol{counter-reset:listitem}.mw-parser-output .hlist ol>li{counter-increment:listitem}.mw-parser-output .hlist ol>li::before{content:" "counter(listitem)"\a0 "}.mw-parser-output .hlist dd ol>li:first-child::before,.mw-parser-output .hlist dt ol>li:first-child::before,.mw-parser-output .hlist li ol>li:first-child::before{content:" ("counter(listitem)"\a0 "}
/* end https://en.wikipedia.org/ */
</style><style data-mw-deduplicate="TemplateStyles:r1236075235">
/* start https://en.wikipedia.org/ */
.mw-parser-output .navbox{box-sizing:border-box;border:1px solid #a2a9b1;width:100%;clear:both;font-size:88%;text-align:center;padding:1px;margin:1em auto 0}.mw-parser-output .navbox .navbox{margin-top:0}.mw-parser-output .navbox+.navbox,.mw-parser-output .navbox+.navbox-styles+.navbox{margin-top:-1px}.mw-parser-output .navbox-inner,.mw-parser-output .navbox-subgroup{width:100%}.mw-parser-output .navbox-group,.mw-parser-output .navbox-title,.mw-parser-output .navbox-abovebelow{padding:0.25em 1em;line-height:1.5em;text-align:center}.mw-parser-output .navbox-group{white-space:nowrap;text-align:right}.mw-parser-output .navbox,.mw-parser-output .navbox-subgroup{background-color:#fdfdfd}.mw-parser-output .navbox-list{line-height:1.5em;border-color:#fdfdfd}.mw-parser-output .navbox-list-with-group{text-align:left;border-left-width:2px;border-left-style:solid}.mw-parser-output tr+tr>.navbox-abovebelow,.mw-parser-output tr+tr>.navbox-group,.mw-parser-output tr+tr>.navbox-image,.mw-parser-output tr+tr>.navbox-list{border-top:2px solid #fdfdfd}.mw-parser-output .navbox-title{background-color:#ccf}.mw-parser-output .navbox-abovebelow,.mw-parser-output .navbox-group,.mw-parser-output .navbox-subgroup .navbox-title{background-color:#ddf}.mw-parser-output .navbox-subgroup .navbox-group,.mw-parser-output .navbox-subgroup .navbox-abovebelow{background-color:#e6e6ff}.mw-parser-output .navbox-even{background-color:#f7f7f7}.mw-parser-output .navbox-odd{background-color:transparent}.mw-parser-output .navbox .hlist td dl,.mw-parser-output .navbox .hlist td ol,.mw-parser-output .navbox .hlist td ul,.mw-parser-output .navbox td.hlist dl,.mw-parser-output .navbox td.hlist ol,.mw-parser-output .navbox td.hlist ul{padding:0.125em 0}.mw-parser-output .navbox .navbar{display:block;font-size:100%}.mw-parser-output .navbox-title .navbar{float:left;text-align:left;margin-right:0.5em}body.skin--responsive .mw-parser-output .navbox-image img{max-width:none!important}@media print{body.ns-0 .mw-parser-output .navbox{display:none!important}}
/* end https://en.wikipedia.org/ */
</style></div><div role="navigation" class="navbox" aria-labelledby="APL_programming493" style="padding:3px"><table class="nowraplinks hlist mw-collapsible autocollapse navbox-inner" style="border-spacing:0;background:transparent;color:inherit"><tbody><tr><th scope="col" class="navbox-title" colspan="3"><style data-mw-deduplicate="TemplateStyles:r1239400231">
/* start https://en.wikipedia.org/ */
.mw-parser-output .navbar{display:inline;font-size:88%;font-weight:normal}.mw-parser-output .navbar-collapse{float:left;text-align:left}.mw-parser-output .navbar-boxtext{word-spacing:0}.mw-parser-output .navbar ul{display:inline-block;white-space:nowrap;line-height:inherit}.mw-parser-output .navbar-brackets::before{margin-right:-0.125em;content:"[ "}.mw-parser-output .navbar-brackets::after{margin-left:-0.125em;content:" ]"}.mw-parser-output .navbar li{word-spacing:-0.125em}.mw-parser-output .navbar a>span,.mw-parser-output .navbar a>abbr{text-decoration:inherit}.mw-parser-output .navbar-mini abbr{font-variant:small-caps;border-bottom:none;text-decoration:none;cursor:inherit}.mw-parser-output .navbar-ct-full{font-size:114%;margin:0 7em}.mw-parser-output .navbar-ct-mini{font-size:114%;margin:0 4em}html.skin-theme-clientpref-night .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}@media(prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}}@media print{.mw-parser-output .navbar{display:none!important}}
/* end https://en.wikipedia.org/ */
</style><div id="APL_programming493" style="font-size:114%;margin:0 4em"><a href="APL_(programming_language)" title="APL (programming language)">APL programming</a></div></th></tr><tr><th scope="row" class="navbox-group" style="width:1%">Features</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="APL_syntax_and_symbols" title="APL syntax and symbols">APL syntax and symbols</a></li>
<li><a href="Direct_function" title="Direct function">Direct function</a> (dfn)</li>
<li><a href="Digital_encoding_of_APL_symbols" title="Digital encoding of APL symbols">Code pages</a></li>
<li><a href="Iverson_bracket" title="Iverson bracket">Iverson bracket</a></li>
<li><a href="Rank_(J_programming_language)" title="Rank (J programming language)">Rank</a></li>
<li><a href="Shared_Variables" title="Shared Variables">Shared Variables</a></li></ul>
</div></td><td class="noviewer navbox-image" rowspan="3" style="width:1px;padding:0 0 0 2px"><div><span typeof="mw:File"></span></div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Programming_language_implementation" title="Programming language implementation">Implementations</a></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"></div><table class="nowraplinks navbox-subgroup" style="border-spacing:0"><tbody><tr><th scope="row" class="navbox-group" style="width:1%">Major</th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li>Dyalog APL</li>
<li>APL2 → <i>APLX</i></li>
<li><i>SHARP APL</i></li>
<li><i>NARS</i> → NARS2000°</li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Dialect_(computing)" class="mw-redirect" title="Dialect (computing)">Dialects</a></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="A%2B_(programming_language)" title="A+ (programming language)"><i>A</i> → <i>A+</i></a>°</li>
<li>APLNext → <i>VisualAPL</i></li>
<li><i><a href="ELI_(programming_language)" title="ELI (programming language)">ELI</a></i></li>
<li><i>GNU APL</i>°</li>
<li>°</li>
<li><a href="Kdb%2B" title="Kdb+">kdb+</a>
<ul><li><a href="K_(programming_language)" title="K (programming language)">K</a>, <a href="Q_(programming_language_from_Kx_Systems)" title="Q (programming language from Kx Systems)">Q</a></li></ul></li>
<li><i><a href="Polymorphic_Programming_Language" title="Polymorphic Programming Language">Polymorphic Programming Language</a></i> (PPL)</li></ul>
</div></td></tr></tbody></table><div></div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Community_of_practice" title="Community of practice">Community</a></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"></div><table class="nowraplinks navbox-subgroup" style="border-spacing:0"><tbody><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Professional_association" title="Professional association">Professional<br>associations</a></th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Association_for_Computing_Machinery" title="Association for Computing Machinery">Association for Computing Machinery</a>: SIGAPL</li>
<li>British APL Association</li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Organizations</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"></div><table class="nowraplinks navbox-subgroup" style="border-spacing:0"><tbody><tr><th scope="row" class="navbox-group" style="width:1%">Business</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Ampere_WS-1" title="Ampere WS-1">Ampere</a></li>
<li>Analogic Corporation</li>
<li>APL2000</li>
<li><a href="CompuServe" title="CompuServe">CompuServe</a></li>
<li><a href="Digital_Equipment_Corporation" title="Digital Equipment Corporation">Digital Equipment Corporation</a> (DEC)</li>
<li>DNA Systems</li>
<li>Dyalog Ltd.</li>
<li><a href="IBM" title="IBM">IBM</a></li>
<li><a href="I._P._Sharp_Associates" title="I. P. Sharp Associates">I. P. Sharp Associates</a></li>
<li><a href="Kx_Systems" class="mw-redirect" title="Kx Systems">Kx Systems</a></li>
<li><a href="MCM/70" title="MCM/70">Micro Computer Machines</a> (MCM)</li>
<li><a href="Science_Research_Associates" title="Science Research Associates">Science Research Associates</a></li>
<li><a href="Scientific_Time_Sharing_Corporation" title="Scientific Time Sharing Corporation">Scientific Time Sharing Corporation</a> (STSC)</li>
<li><a href="Soliton_Incorporated" title="Soliton Incorporated">Soliton Incorporated</a></li>
<li>Telecompute Integrated Systems, Inc.</li>
<li>Time Sharing Resources (TSR)</li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Education</th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Carnegie_Mellon_University" title="Carnegie Mellon University">Carnegie Mellon University</a> (CMU)</li>
<li><a href="University_of_Maryland%2C_College_Park" title="University of Maryland, College Park">University of Maryland</a></li></ul>
</div></td></tr></tbody></table><div></div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">People</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Philip_S._Abrams" title="Philip S. Abrams">Phil Abrams</a></li>
<li><a href="Robert_Bernecky" title="Robert Bernecky">Bob Bernecky</a></li>
<li><a href="Lawrence_M._Breed" title="Lawrence M. Breed">Larry Breed</a></li>
<li><a href="Charles_Brenner_(mathematician)" title="Charles Brenner (mathematician)">Charles Brenner</a></li>
<li><a href="Fred_Brooks" title="Fred Brooks">Fred Brooks</a></li>
<li><a href="Jim_Brown_(computer_scientist)" title="Jim Brown (computer scientist)">Jim Brown</a></li>
<li><a href="Adin_Falkoff" title="Adin Falkoff">Adin Falkoff</a></li>
<li>Patrick E. Hagerty</li>
<li>Herbert Hellerman</li>
<li><a href="Roger_Hui" title="Roger Hui">Roger Hui</a></li>
<li><a href="Kenneth_E._Iverson" title="Kenneth E. Iverson">Kenneth E. Iverson</a></li>
<li><a href="Richard_H._Lathwell" title="Richard H. Lathwell">Dick Lathwell</a></li>
<li><a href="Eugene_McDonnell" title="Eugene McDonnell">Eugene McDonnell</a></li>
<li>Robert Metzger</li>
<li><a href="Roger_Moore_(computer_scientist)" title="Roger Moore (computer scientist)">Roger Moore</a></li>
<li><a href="Alan_Perlis" title="Alan Perlis">Alan Perlis</a></li>
<li><a href="John_M._Scholes" title="John M. Scholes">John Scholes</a></li>
<li>J. Henri Schueler</li>
<li>Bob Smith</li>
<li><a href="Edward_H._Sussenguth" title="Edward H. Sussenguth">Edward H. Sussenguth</a> Jr.</li>
<li><a href="Arthur_Whitney_(computer_scientist)" title="Arthur Whitney (computer scientist)">Arthur Whitney</a></li>
<li>William Yerazunis</li>
<li><a href="Rodnay_Zaks" title="Rodnay Zaks">Rodnay Zaks</a></li></ul>
</div></td></tr><tr><td colspan="2" class="navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Iverson_Award" title="Iverson Award">Iverson Award</a></li></ul>
</div></td></tr></tbody></table><div></div></td></tr><tr><td class="navbox-abovebelow" colspan="3"><div>
<ul><li><i>Italics</i> <b>= discontinued</b></li>
<li><b>° = <a href="Open-source_software" title="Open-source software">Open-source software</a></b><br><span class="noviewer" typeof="mw:File"><span title="Commons page"></span></span> <b><a href="https://commons.wikimedia.org/wiki/Category:APL_(programming_language)" class="extiw external" title="commons:Category:APL (programming language)">Commons</a></b> <span class="noviewer" typeof="mw:File"><span title="Category"></span></span> <b>Category</b></li></ul>
</div></td></tr></tbody></table></div>
<div class="navbox-styles"></div><div role="navigation" class="navbox authority-control" aria-label="Navbox507" style="padding:3px"><table class="nowraplinks hlist navbox-inner" style="border-spacing:0;background:transparent;color:inherit"><tbody><tr><th scope="row" class="navbox-group" style="width:1%">Authority control databases: National </th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"><ul><li><span class="uid"><a rel="nofollow" class="external text" href="https://id.loc.gov/authorities/sh2001001715">United States</a></span></li><li><span class="uid"><a rel="nofollow" class="external text" href="https://www.nli.org.il/en/authorities/987007530455105171">Israel</a></span></li></ul></div></td></tr></tbody></table></div></div><!--htdig_noindex--><div><div class="zim-footer">
This article is issued from <a class="external text" title="Last edited on 2025-03-26" href="https://en.wikipedia.org/wiki/?title=J_(programming_language)&oldid=1282411357">Wikipedia</a>. The text is available under <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en">Creative Commons Attribution-Share Alike 4.0</a> unless otherwise noted. Additional terms may apply for the media files.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
</body></html>